package com.jmyd.coupon.server.domain.vo;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.jmyd.commons.annatations.Date2LongSerializer;
import com.jmyd.coupon.server.enums.SceneCouponDrawTypeEnum;
import com.jmyd.coupon.server.enums.SceneCouponExclusiveStatusEnum;
import com.jmyd.coupon.server.enums.SceneCouponTypeEnum;
import com.jmyd.coupon.server.enums.SceneCouponUsePlatformEnum;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author samphin
 * @since 2021/7/14 16:15
 */
@Data
public class SceneCouponDrawRecordVo implements Serializable {

    private static final long serialVersionUID = 8691023951751193393L;

    /**
     * 用户ID
     */
    private String userId;

    /**
     * 用户账号
     */
    private String username;

    /**
     * 用户昵称
     */
    private String nickname;

    /**
     * 优惠券ID
     */
    private Long couponId;

    /**
     * 优惠券名称
     */
    private String couponName;

    /**
     * 优惠券面值（如果满减券则为满金额，条件值）
     */
    private BigDecimal amount;

    /**
     * 优惠金额面值（针对满减券，折扣值）
     */
    private BigDecimal discountAmount;

    /**
     * 优惠券类型名称
     */
    private String couponTypeDic;

    /**
     * 互斥状态：true=互斥;false=不互斥
     */
    private Boolean exclusiveStatus;

    /**
     * 互斥状态：互斥;不互斥
     */
    private String exclusiveStatusDic;

    /**
     * 使用平台：PC、APP、H5、APPLET
     */
    private String usePlatform;

    /**
     * 有效期起始时间
     */
    private Date validStartTime;

    /**
     * 有效期结束时间
     */
    private Date validEndTime;

    /**
     * 领取时间
     */
    @JsonSerialize(using = Date2LongSerializer.class)
    public Date createTs;

    /**
     * 领取类型：1、新人注册;2、赠送;3、手动领取
     */
    private Integer type;

    /**
     * 领取类型：1、新人注册;2、赠送;3、手动领取
     */
    private String typeDic;

    public List<SceneCouponDrawRecordVo> build(List<SceneCouponDrawRecordVo> voList) {
        if (CollectionUtils.isEmpty(voList)) {
            return new ArrayList<>(1);
        }
        return voList.stream().map(po -> {
            SceneCouponDrawRecordVo vo = new SceneCouponDrawRecordVo();
            BeanUtils.copyProperties(po, vo);
            vo.setCouponTypeDic(SceneCouponTypeEnum.getByCode(po.getType()));
            vo.setUsePlatform(SceneCouponUsePlatformEnum.getByCode(po.getUsePlatform()));
            vo.setExclusiveStatusDic(SceneCouponExclusiveStatusEnum.getByCode(po.getExclusiveStatus()));
            vo.setTypeDic(SceneCouponDrawTypeEnum.getByCode(po.getType()));
            return vo;
        }).collect(Collectors.toList());
    }
}